Flink-核心原理
一、
二、状态计算
三、容错机制
四、资源信息
队列、算子并行度(32)
TM数(16)、TM内存(4G)、JM内存(4G)
「模式」
大流量作业:独立 Application Cluster
小作业:合并到 Session Cluster 共享 TM
「解释」
物理机(Node)、Kubernetes Pod、Flink Job、JobManager / TaskManager、Task / SubTask
之间的 层级关系 & 调度关系
1.物理机(Node):Flink 在 K8s 中运行,一个Node可以跑多个 TaskManager Pods,多个JobManager Pod
2.Pod 层(K8s 调度单位):
「Flink on K8s」
flowchart TB
%% =========== Kubernetes Node ===========
subgraph Node[物理节点 / Kubernetes Node]
direction TB
JM_Pod[Pod:JobManager Pod]
TM_Pod1[Pod:TaskManager Pod 1]
TM_Pod2[Pod:TaskManager Pod 2]
end
%% =========== Pod 内容 ===========
JM_Pod --> JM[JobManager]
TM_Pod1 --> TM1[TaskManager 1]
TM_Pod2 --> TM2[TaskManager 2]
%% =========== Slot 层 ===========
subgraph SL1[TaskManager 1 Slots]
direction TB
TM1_S1[Slot 1]
TM1_S2[Slot 2]
TM1_S3[Slot 3]
end
subgraph SL2[TaskManager 2 Slots]
direction TB
TM2_S1[Slot 1]
TM2_S2[Slot 2]
TM2_S3[Slot 3]
end
TM1 --> SL1
TM2 --> SL2
%% =========== Flink Jobs ===========
subgraph JobA[Flink Job A]
direction TB
A_Task1[Task A1]
A_Task2[Task A2]
end
subgraph JobB[Flink Job B]
direction TB
B_Task1[Task B1]
B_Task2[Task B2]
end
subgraph JobC[Flink Job C]
direction TB
C_Task1[Task C1]
C_Task2[Task C2]
end
%% =========== SubTasks ===========
subgraph SubTasks[Tasks 并行实例(SubTasks)]
direction TB
A1[SubTask A1-1]
A2[SubTask A1-2]
A3[SubTask A2-1]
A4[SubTask A2-2]
B1[SubTask B1-1]
B2[SubTask B1-2]
B3[SubTask B2-1]
B4[SubTask B2-2]
C1[SubTask C1-1]
C2[SubTask C1-2]
C3[SubTask C2-1]
C4[SubTask C2-2]
end
%% =========== 调度关系 ===========
JM --> JobA
JM --> JobB
JM --> JobC
A_Task1 --> A1
A_Task1 --> A2
A_Task2 --> A3
A_Task2 --> A4
B_Task1 --> B1
B_Task1 --> B2
B_Task2 --> B3
B_Task2 --> B4
C_Task1 --> C1
C_Task1 --> C2
C_Task2 --> C3
C_Task2 --> C4
%% ========== 多 Job 共享 Slot ==========
A1 --> TM1_S1
A2 --> TM2_S1
A3 --> TM1_S2
A4 --> TM2_S2
B1 --> TM1_S3
B2 --> TM2_S3
B3 --> TM1_S1
B4 --> TM2_S2
C1 --> TM1_S2
C2 --> TM2_S1
C3 --> TM1_S3
C4 --> TM2_S3
「Flink 集群(Session Cluster)完整架构图」
flowchart TB
%% ========================================================
%% Kubernetes 节点层(真实实体:实线)
%% ========================================================
subgraph Node1[Node 1(物理机/虚机)]
direction TB
subgraph JM_Pod[JobManager Pod]
direction TB
JM_Container[Container]
JM[JobManager(JVM 进程
Dispatcher / REST / Scheduler)]
end
subgraph TM_Pod_1[TaskManager Pod #1]
direction TB
TM_Container_1[Container]
subgraph TM1[TaskManager #1]
direction TB
Slot11[Slot #1]
Slot12[Slot #2]
end
end
end
subgraph Node2[Node 2]
direction TB
subgraph TM_Pod_2[TaskManager Pod #2]
direction TB
TM_Container_2[Container]
subgraph TM2[TaskManager #2]
direction TB
Slot21[Slot #1]
Slot22[Slot #2]
end
end
end
subgraph Node3[Node 3]
direction TB
subgraph TM_Pod_3[TaskManager Pod #3]
direction TB
TM_Container_3[Container]
subgraph TM3[TaskManager #3]
direction TB
Slot31[Slot #1]
Slot32[Slot #2]
end
end
end
%% ========================================================
%% Flink Job 逻辑层(虚线)
%% ========================================================
classDef dashed stroke-dasharray: 5 5;
subgraph JobGraph["Flink Job(抽象逻辑)"]
class JobGraph dashed;
direction TB
subgraph TaskA["Task A(Stage 1)"]
class TaskA dashed;
A1["SubTask A-1"]
A2["SubTask A-2"]
A3["SubTask A-3"]
end
subgraph TaskB["Task B(Stage 2)"]
class TaskB dashed;
B1["SubTask B-1"]
B2["SubTask B-2"]
B3["SubTask B-3"]
end
end
%% ========================================================
%% 调度关系(虚线箭头:逻辑 → 实体 Slot)
%% ========================================================
A1 -.-> Slot11
A2 -.-> Slot21
A3 -.-> Slot31
B1 -.-> Slot12
B2 -.-> Slot22
B3 -.-> Slot32
「Session Cluster vs Application Cluster 架构对比图」
flowchart TB
subgraph Session["Flink Session Cluster"]
direction TB
subgraph SessionJM["JobManager Pod(长期存在)"]
SJMgr[JobManager]
end
subgraph SessionTM["多个 TaskManager Pod(所有 Job 共享)"]
STM1[TaskManager Pod #1]
STM2[TaskManager Pod #2]
STM3[TaskManager Pod #3]
end
SJ1["Client 提交多个 Job"] --> SJMgr
SJMgr --> STM1
SJMgr --> STM2
SJMgr --> STM3
SJNote["特点:
• 多个 Job 共享 JM/TM
• 集群先启动,Job 后进入
• 资源抢占(不隔离)
• 适合小作业/交互式环境"]
end
subgraph Application["Flink Application Cluster"]
direction TB
APClient["用户提交:flink run-application"]
subgraph AppJM["JobManager Pod(随 Job 启动/销毁)"]
AJMgr[JobManager(仅运行该 Job)]
end
subgraph AppTM["TaskManager Pod(仅该 Job 使用)"]
ATM1[TaskManager Pod #1]
ATM2[TaskManager Pod #2]
end
APClient --> AJMgr
AJMgr --> ATM1
AJMgr --> ATM2
APNote["特点:
• 每个 Job 生成独立集群
• Job 结束 → 集群销毁
• 强隔离,不共享 TM
• 适合生产大 Job / 长任务"]
end
flowchart TB
%% =========================
%% Title
%% =========================
A[三种 Flink 部署模式对比
Session vs Application vs Per-Job]
%% =========================
%% Session Cluster
%% =========================
subgraph S[Session Cluster(长期运行,可共享资源)]
direction TB
S-JM[JobManager Pod
集群长期存在]
subgraph S-TM-POOL[TaskManager Pods 池
多个作业共享]
S-TM1[TM Pod 1
Slots: 1..N]
S-TM2[TM Pod 2
Slots: 1..N]
S-TM3[TM Pod 3
Slots: 1..N]
end
subgraph S-JOBS[多个作业同时运行]
S-JOB1[Job-1]
S-JOB2[Job-2]
S-JOB3[Job-3]
end
S-JOB1 --> S-TM1
S-JOB1 --> S-TM2
S-JOB2 --> S-TM2
S-JOB2 --> S-TM3
S-JOB3 --> S-TM1
S-JOB3 --> S-TM3
S-JOBS --> S-JM
end
%% =========================
%% Application Cluster
%% =========================
subgraph A2[Application Cluster(每个 APP 一个集群)]
direction TB
A2-JM[JobManager Pod
随 App 启动,App 结束即删除]
subgraph A2-TM-PODS[TaskManager Pods(仅此 App 使用)]
A2-TM1[TM Pod 1
Slots:1..N]
A2-TM2[TM Pod 2
Slots:1..N]
end
subgraph A2-JOBS[App 内多个 Job]
A2-JOB1[Job A-1]
A2-JOB2[Job A-2]
end
A2-JOB1 --> A2-TM1
A2-JOB2 --> A2-TM2
A2-JOBS --> A2-JM
end
%% =========================
%% Per-Job Cluster
%% =========================
subgraph P[Per-Job Cluster(每个 Job 独立集群)]
direction TB
P-JOB[单个 Job(独占资源)]
P-JM[JobManager Pod(随 Job 启动)]
subgraph P-TM-PODS[TaskManager Pods(仅此 Job 使用)]
P-TM1[TM Pod 1
Slots: 1..N]
P-TM2[TM Pod 2
Slots: 1..N]
end
P-JOB --> P-TM1
P-JOB --> P-TM2
P-JOB --> P-JM
end
%% Top level links
A --> S
A --> A2
A --> P